// 计算器状态
let calculator = {
    displayValue: '0',
    firstOperand: null,
    waitingForSecondOperand: false,
    operator: null,
    displayHistory: ''
};

// 初始化页面时加载历史记录
document.addEventListener('DOMContentLoaded', function() {
    loadHistory();
});

// 更新显示
function updateDisplay() {
    const display = document.getElementById('display');
    const historyDisplay = document.querySelector('.display-history');
    display.textContent = calculator.displayValue;
    historyDisplay.textContent = calculator.displayHistory;
}

// 追加数字
function appendNumber(number) {
    const { displayValue, waitingForSecondOperand } = calculator;
    
    if (waitingForSecondOperand) {
        calculator.displayValue = number;
        calculator.waitingForSecondOperand = false;
    } else {
        // 如果当前显示为0，则替换，否则追加
        calculator.displayValue = displayValue === '0' ? number : displayValue + number;
    }
    
    updateDisplay();
}

// 追加小数点
function appendDecimal() {
    // 如果正在等待第二个操作数，则设置为'0.'
    if (calculator.waitingForSecondOperand) {
        calculator.displayValue = '0.';
        calculator.waitingForSecondOperand = false;
        updateDisplay();
        return;
    }
    
    // 如果显示值不包含小数点，则添加小数点
    if (!calculator.displayValue.includes('.')) {
        calculator.displayValue += '.';
        updateDisplay();
    }
}

// 设置运算符
function setOperator(nextOperator) {
    const { firstOperand, displayValue, operator } = calculator;
    const inputValue = parseFloat(displayValue);
    
    // 检查是否已经有第一个操作数和运算符
    if (operator && calculator.waitingForSecondOperand) {
        calculator.operator = nextOperator;
        return;
    }
    
    // 如果有第一个操作数和新的运算符，则执行计算
    if (firstOperand !== null && operator) {
        calculate();
    }
    
    // 保存第一个操作数和选择的运算符
    calculator.firstOperand = inputValue;
    calculator.waitingForSecondOperand = true;
    calculator.operator = nextOperator;
    calculator.displayHistory = `${displayValue} ${getOperatorSymbol(nextOperator)}`;
    
    updateDisplay();
}

// 获取运算符的显示符号
function getOperatorSymbol(operator) {
    switch (operator) {
        case '+': return '+';
        case '-': return '−';
        case '*': return '×';
        case '/': return '÷';
        default: return operator;
    }
}

// 执行计算
function calculate() {
    const { firstOperand, displayValue, operator } = calculator;
    
    if (firstOperand === null || operator === null) {
        return;
    }
    
    const secondOperand = parseFloat(displayValue);
    let result;
    
    // 使用后端API进行计算
    fetch('/calculate', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            num1: firstOperand,
            num2: secondOperand,
            operator: operator
        })
    })
    .then(response => response.json())
    .then(data => {
        if (data.error) {
            // 如果有错误，显示错误信息
            calculator.displayValue = data.error;
            calculator.firstOperand = null;
            calculator.operator = null;
            calculator.waitingForSecondOperand = false;
        } else {
            // 保存计算结果
            result = data.result;
            
            // 格式化结果，移除不必要的小数点和尾随零
            if (Number.isInteger(result)) {
                calculator.displayValue = result.toString();
            } else {
                // 限制小数位数为10位
                calculator.displayValue = result.toFixed(10).replace(/\.?0+$/, '');
            }
            
            // 更新历史记录
            const historyEntry = `${firstOperand} ${getOperatorSymbol(operator)} ${secondOperand} = ${calculator.displayValue}`;
            saveToHistory(historyEntry);
            
            // 重置计算器状态
            calculator.firstOperand = null;
            calculator.operator = null;
            calculator.waitingForSecondOperand = false;
        }
        
        // 清空历史显示
        calculator.displayHistory = '';
        
        // 更新显示
        updateDisplay();
    })
    .catch(error => {
        console.error('计算错误:', error);
        // 在API调用失败时使用本地计算作为备选
        localCalculate(firstOperand, secondOperand, operator);
    });
}

// 本地计算作为API调用失败的备选
function localCalculate(firstOperand, secondOperand, operator) {
    let result;
    
    try {
        switch (operator) {
            case '+':
                result = firstOperand + secondOperand;
                break;
            case '-':
                result = firstOperand - secondOperand;
                break;
            case '*':
                result = firstOperand * secondOperand;
                break;
            case '/':
                if (secondOperand === 0) {
                    calculator.displayValue = '除数不能为零！';
                    updateDisplay();
                    return;
                }
                result = firstOperand / secondOperand;
                break;
            default:
                return;
        }
        
        // 格式化结果
        if (Number.isInteger(result)) {
            calculator.displayValue = result.toString();
        } else {
            calculator.displayValue = result.toFixed(10).replace(/\.?0+$/, '');
        }
        
        // 更新历史记录
        const historyEntry = `${firstOperand} ${getOperatorSymbol(operator)} ${secondOperand} = ${calculator.displayValue}`;
        saveToHistory(historyEntry);
        
    } catch (error) {
        calculator.displayValue = '计算错误';
    }
    
    // 重置计算器状态
    calculator.firstOperand = null;
    calculator.operator = null;
    calculator.waitingForSecondOperand = false;
    calculator.displayHistory = '';
    
    // 更新显示
    updateDisplay();
}

// 切换正负号
function toggleSign() {
    const { displayValue } = calculator;
    
    // 如果当前值不是0，则切换正负号
    if (displayValue !== '0') {
        calculator.displayValue = parseFloat(displayValue) * -1 + '';
        updateDisplay();
    }
}

// 清除当前输入
function clearEntry() {
    calculator.displayValue = '0';
    updateDisplay();
}

// 清除所有内容
function clearAll() {
    calculator.displayValue = '0';
    calculator.firstOperand = null;
    calculator.waitingForSecondOperand = false;
    calculator.operator = null;
    calculator.displayHistory = '';
    updateDisplay();
}

// 保存计算结果到历史记录
function saveToHistory(entry) {
    // 从localStorage获取历史记录
    let history = JSON.parse(localStorage.getItem('calculatorHistory')) || [];
    
    // 添加新的历史记录条目
    history.unshift({ entry: entry, timestamp: new Date().toISOString() });
    
    // 限制历史记录数量为50条
    if (history.length > 50) {
        history = history.slice(0, 50);
    }
    
    // 保存回localStorage
    localStorage.setItem('calculatorHistory', JSON.stringify(history));
    
    // 更新历史记录显示
    updateHistoryDisplay();
}

// 加载历史记录
function loadHistory() {
    updateHistoryDisplay();
}

// 更新历史记录显示
function updateHistoryDisplay() {
    const historyList = document.getElementById('history-list');
    
    // 从localStorage获取历史记录
    const history = JSON.parse(localStorage.getItem('calculatorHistory')) || [];
    
    // 清空历史记录列表
    historyList.innerHTML = '';
    
    // 如果没有历史记录，显示提示信息
    if (history.length === 0) {
        historyList.innerHTML = '<div class="no-history">暂无历史记录</div>';
        return;
    }
    
    // 添加历史记录条目
    history.forEach(item => {
        const historyItem = document.createElement('div');
        historyItem.className = 'history-item';
        historyItem.textContent = item.entry;
        historyList.appendChild(historyItem);
    });
}

// 清除历史记录
function clearHistory() {
    // 清空localStorage中的历史记录
    localStorage.removeItem('calculatorHistory');
    
    // 更新历史记录显示
    updateHistoryDisplay();
}